package com.zlj.jdbc.transcation;

import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import com.zlj.jdbc.demo.JdbcUtils;

/**
 * 演示转账
 * 
 * Connection 是sql包下的，不应该出现在Dao之外的其他层,此时的Connection出现在了service层 ，所以还有待完善！
 * 
 * @author bashen
 */
public class AccountService {
	/**
	 * 转账方法
	 * @param from
	 * @param to
	 * @param money
	 */
    public void transfer(String from, String to, double money) {
    	Connection conn = null;
    	try {
    		conn = JdbcUtils.getConnection();
    		//开启事务
    		conn.setAutoCommit(false);
    		AccountDao accountDao = new AccountDao();
    		accountDao.updateBalance(conn, from, -money); //from账户减money
    		
    		//演示回滚操作
    		/*if(true) {
    			throw new RuntimeException("Sorry!");
    		}*/
    		
    		accountDao.updateBalance(conn, to, money); //to账户加money
    		//提交事务
            conn.commit();    		
    	} catch(Exception e) {
    		try {
    			//回滚事务
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
    		e.printStackTrace();
    	}
    }
    
    @Test
    public void test() {
    	transfer("zs", "ls", 100);
    }
}
